【C++】迭代器为什么会失效?它的底层原理是什么?什么情况下erase最后一个元素会出现段错误?

您所在的位置:网站首页 stl 迭代器 原理 【C++】迭代器为什么会失效?它的底层原理是什么?什么情况下erase最后一个元素会出现段错误?

【C++】迭代器为什么会失效?它的底层原理是什么?什么情况下erase最后一个元素会出现段错误?

2024-07-13 00:11| 来源: 网络整理| 查看: 265

什么是迭代器失效?有哪些情况会导致迭代器失效?避免C++迭代器失效的开发建议避免C++迭代器故障问题:使用建议:

什么是迭代器失效?

迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T* 。

迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器,程序可能会崩溃)。

在这里插入图片描述

有哪些情况会导致迭代器失效? 引起底层空间发生改变,可能会发生迭代器失效

出错原因:比如:resize、reserve、insert、assign、push_back以上操作,都有可能会导致vector扩容,也就是说vector底层原理旧空间被释放掉,而在打印时,it还使用的是释放之间的旧空间,在对it迭代器操作时,实际操作的是一块已经被释放的空间,而引起代码运行时崩溃。

解决方式:在以上操作完成之后,如果想要继续通过迭代器操作vector中的元素,只需给it重新赋值即可。

错误使用:

int main() { vector arr{ 1,2,3,4 }; auto it = arr.begin(); arr.insert(it, 10);//第一次可以正常的插入 arr.insert(it, 20);//第二次由于扩容原因会导致无法插入 for (auto a : arr) { cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3